package com.itheima.d3_time;

import java.util.Calendar;
import java.util.Date;


/**
 * 需求：把2023年09月10日这个时间增加一个月，原来的做法如下：
 * 定义字符串记住： 2023年09月10日
 * 把字符串时间解析成Date日期对象
 * 通过Date日期对象获取2023年9月10日的毫秒值
 * 增加一个月的毫秒值：1000 * 60 * 60 * 24 * 30
 * 再格式化时间毫秒值得到结果：2023年10月10日
 *
 * 其中第三第四步非常繁琐，此时就需要Calendar了
 * 为什么要学习Calendar?
 * 代表的是系统此刻时间对应的日历。
 * 通过它可以单独获取年、月、日，修改时间中的年、月、日、时、分、秒等。
 *
 * 1、Calendar的对象，我们是如何获取的？
 *public static Calendar getInstance() ： 获取当前日历对象
 *
 * 注意：calendar是可变对象，一旦修改后其对象本身表示的时间将产生变化。
 *
 */
public class Test4Calendar {
    public static void main(String[] args) {
        // 目标：掌握Calendar的使用和特点。
        // 1、得到系统此刻时间对应的日历对象。 public static Calendar getInstance()
        Calendar now = Calendar.getInstance();
        System.out.println(now);
        System.out.println(now.getCalendarType());
        System.out.println(now.getClass());

        System.out.println("=====================");

        // 2、获取日历中的某个信息     public int get(int field)
        int year = now.get(Calendar.YEAR);  //YEAR是常量
        System.out.println(year);

        int days = now.get(Calendar.DAY_OF_YEAR);
        System.out.println(days);

        // 3、拿到日历中记录的日期对象。      public final Date getTime()
        Date d = now.getTime();
        System.out.println(d);

        // 4、拿到时间毫秒值                public long getTimeInMillis()
        long time = now.getTimeInMillis();
        System.out.println(time);

        // 5、修改日历中的某个信息         public void set(int field,int value)
        //修改月份，记住月份是从零开始记录的，所以9就是十月份
        now.set(Calendar.MONTH, 9); // 修改月份成为10月份。
        now.set(Calendar.DAY_OF_YEAR, 125); // 修改成一年中的第125天。
        //没有乱套 改了一个值其他值也会跟着改 这是改了两次 其他值也变了两次
        System.out.println(now);

        // 6、为某个信息增加或者减少多少      public void add(int field,int amount)
        now.add(Calendar.DAY_OF_YEAR, 100);
        now.add(Calendar.DAY_OF_YEAR, -10);
        now.add(Calendar.DAY_OF_MONTH, 6);
        now.add(Calendar.HOUR, 12);
        now.set(2026, 11, 22);
        System.out.println(now);
    }
}
